//package com.example.mybaseapp.util
//
//import android.app.NotificationManager
//import androidx.core.app.NotificationCompat
//import com.example.mybaseapp.MyApplication
//
///**
//@description: 下载管理
//@author: xiaohua
//@create-date: 2024/5/16
// */
//class UploadVersionManager private constructor() {
//
//    companion object {
//        @Volatile
//        private var INSTANCE: UploadVersionManager? = null
//        fun get(): UploadVersionManager =
//            INSTANCE ?: synchronized(this) {
//                INSTANCE ?: UploadVersionManager().also {
//                    INSTANCE = it
//                }
//            }
//    }
//
//    private lateinit var notificationManager: NotificationManager
//    private lateinit var builder: NotificationCompat.Builder
//    private lateinit var downloadUrl: String
//    private lateinit var fileName: String
//    private lateinit var saveApkPath: String
//
//    var cancel = false
//
//    fun download(downloadApkUrl: String, originName: String) {
//        cancel = false
//        downloadUrl = downloadApkUrl
//        fileName = originName
//        saveApkPath = MyApplication.CONTEXT.getExternalFilesDir("apk")!!.absolutePath "/$fileName"
//        if (MyApplication.CONTEXT.getSpValue(UPDATE_VERSION, "") == originName) {
//            // 已经下载完成
//            installApk(saveApkPath)
//            return
//        }
//        initNotification()
////        registerReceiver()
//        val client = OkHttpClient()
//        val request: Request = Request.Builder().url(downloadUrl).build()
//
//        client.newCall(request).enqueue(object : Callback {
//            override fun onFailure(call: Call, e: IOException) {
//                updateNotification(0, false)
//            }
//
//            override fun onResponse(call: Call, response: Response) {
//                val input: InputStream = response.body?.byteStream()!!
//                val downloadStr1 = MyApplication.CONTEXT.getExternalFilesDir("apk")!!.absolutePath
//                val file = File(downloadStr1)
//                if (!file.exists()) {
//                    file.mkdirs()
//                }
//                Log.e("DownloadManager", "downloadStr: $downloadStr1")
//                val file2 = File(saveApkPath)
//                if (!file2.exists()) {
//                    file2.createNewFile()
//                }
//                val output: OutputStream = FileOutputStream(file2)
//                val data = ByteArray(4096)
//                var total: Long = 0
//                var count: Int
//                // 未被取消的时候继续下载
//                while (input.read(data).also { count = it } != -1 && !cancel) {
//                    total += count.toLong()
//                    Log.e("DownloadManager", "onResponse: total--$total")
//                    // Publish the progress
//                    val percent = (total.toDouble() / response.body!!.contentLength().toDouble()) * 100
//                    updateNotification(percent.toInt(), true)
//                    output.write(data, 0, count)
//                }
//                output.close()
//            }
//        })
//    }
//
//    private fun initNotification() {
//        try {
//            notificationManager =
//                MyApplication.CONTEXT.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
//            // Android8.0及以后的方式
//            if (Build.VERSION.SDK_INT = 26) {
//                // 创建通知渠道
//                val notificationChannel = NotificationChannel("download_channel", "下载",
//                    NotificationManager.IMPORTANCE_DEFAULT).apply {
//                    enableLights(false) //关闭闪光灯
//                    enableVibration(false) //关闭震动
//                    setSound(null, null) //设置静音
//                }
//                notificationManager.createNotificationChannel(notificationChannel)
//            }
//            builder = NotificationCompat.Builder(MyApplication.CONTEXT, "download_channel")
//            builder.setContentTitle("已下载(0%)") //设置标题
//                .setSmallIcon(MyApplication.CONTEXT.applicationInfo.icon) //设置小图标
//                .setLargeIcon(
//                    BitmapFactory.decodeResource(MyApplication.CONTEXT.resources,
//                        MyApplication.CONTEXT.applicationInfo.icon)) //设置大图标
//                .setPriority(NotificationCompat.PRIORITY_MAX) //设置通知的优先级
//                .setSound(null) //设置静音
//                .setContentText("正在下载 点击取消") //设置内容
//                .setProgress(100, 0, false) //设置进度条
//                .setAutoCancel(true)
//                .setContentIntent(cancelDownloadIntent())
//                .setOngoing(true)
//            notificationManager.notify(100, builder.build())
//        } catch (x: Exception) {
//            Log.e("DownloadManager", "initNotification error=$x")
//        }
//    }
//
//    /**
//     * 设置通知点击事件
//     *
//     * @return 点击事件
//     */
//    private fun createInstallIntent(): PendingIntent {
//        val apkFile = File(saveApkPath)
//
//        var apkUri = Uri.fromFile(apkFile);
//
//        val installIntent = Intent(Intent.ACTION_VIEW)
//        installIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
//
//        if (Build.VERSION.SDK_INT = Build.VERSION_CODES.N) {
//            //通过FileProvider创建一个content类型的Uri
//            apkUri = FileProvider.getUriForFile(MyApplication.CONTEXT, "(应用id).fileprovider", apkFile);
//            // 给目标应用一个临时授权
//            installIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
//            installIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
//        }
//
//        installIntent.setDataAndType(apkUri, "application/vnd.android.package-archive")
//
//        val settingsIntent = Intent(
//            Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,
//            Uri.parse("package:" MyApplication.CONTEXT.packageName)
//        )
//
//        return PendingIntent.getActivities(
//            MyApplication.CONTEXT,
//            0, arrayOf(settingsIntent, installIntent),
//            PendingIntent.FLAG_UPDATE_CURRENT
//        )
//    }
//
//    /**
//     * 设置重试点击事件
//     **/
//    private fun createRetryIntent(): PendingIntent {
//        val intent = Intent(MyApplication.CONTEXT, RetryUploadService::class.java)
//        return PendingIntent.getService(MyApplication.CONTEXT, 0, intent, 0)
//    }
//
//    /**
//     * 设置取消点击事件
//     **/
//    private fun cancelDownloadIntent(): PendingIntent {
//        val intent = Intent(MyApplication.CONTEXT, CancelUploadService::class.java)
//        return PendingIntent.getService(MyApplication.CONTEXT, 0, intent, 0)
//    }
//
//    /**
//     * 刷新通知
//     *
//     * @param progress 百分比，此值小于0时不刷新进度条
//    @param isSuccess 是否成功
//     */
//    private fun updateNotification(progress: Int, isSuccess: Boolean) {
//        if (!(::builder.isInitialized)) {
//            return
//        }
//        if (progress >= 0) {
//            builder.setContentTitle("已下载($progress%)")
//                .setProgress(100, progress, false)
//                .setContentText("正在下载 点击取消")
//                .setContentIntent(cancelDownloadIntent()) // 取消intent
//        }
//        if (!isSuccess) {
//            builder.setContentText("下载失败 点击重试")
//                .setContentIntent(createRetryIntent()) // 重试intent
////            unregisterReceiver()
//        } else if (progress == 100) {
//            builder.setContentText("下载完成 点击安装")
//                .setContentIntent(createInstallIntent()) // 安装intent
////            unregisterReceiver()
//
//            MyApplication.CONTEXT.putSpValue(UPDATE_VERSION, fileName)
//
//            installApk(saveApkPath)
//        }
//        notificationManager.notify(100, builder.build())
//    }
//
//
//    /**
//     * 安装apk
//     */
//    fun installApk(installUrl: String) {
//        val apkfile = File(installUrl)
//        if (!apkfile.exists()) {
//            return
//        }
//        val intent = Intent(Intent.ACTION_VIEW)
//        intent.addCategory(Intent.CATEGORY_DEFAULT)
//        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
//        //兼容android7.0以上版本
//        var uri = Uri.fromFile(apkfile)
//        if (Build.VERSION.SDK_INT = Build.VERSION_CODES.N) {
//            //通过FileProvider创建一个content类型的Uri
//            uri = FileProvider.getUriForFile(MyApplication.CONTEXT, "(应用id).fileprovider", apkfile)
//            // 给目标应用一个临时授权
//            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
//            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
//        }
//        intent.setDataAndType(uri, "application/vnd.android.package-archive")
//        MyApplication.CONTEXT.startActivity(intent)
//    }
//}